#include "key.h"
#include "board.h"
#include "oled.h"

/*下面的方式是通过直接操作库函数方式读取IO*/
#define KEY1 DL_GPIO_readPins(GPIOB, GPIO_KEYS_PIN_KEY1_PIN) // PB2
#define KEY2 DL_GPIO_readPins(GPIOB, GPIO_KEYS_PIN_KEY2_PIN) // PB3
#define KEY3 DL_GPIO_readPins(GPIOB, GPIO_KEYS_PIN_KEY3_PIN) // PB4
#define KEY4 DL_GPIO_readPins(GPIOB, GPIO_KEYS_PIN_KEY4_PIN) // PB5


// 按键处理函数
// 返回按键值
// mode:0,不支持连续按;1,支持连续按;
// 0，没有任何按键按下
// 1，KEY0按下
// 2，KEY1按下
// 3，KEY2按下
// 4，WKUP按下 WK_UP
// 注意此函数有响应优先级,KEY0>KEY1>KEY2>WK_UP!!


int KEY_Scan(void) /*SW1 SW2  按键扫描程序*/
{
     if (KEY1 == 0 || KEY2 == 0 || KEY3 == 0 || KEY4 == 0)
      {
        if (KEY1 == 0) // 按键按下低电平		SW1
	    {
	    	delay_ms(10); // 延时去抖
	    	if (KEY1 == 0)
	    	{
	    		while (KEY1 == 0)
	    			; // 等待按键释放
	    		return 1;
	    	}
	    }

	    else if (KEY2 == 0) // 按键按下低电平		SW2
	    {
	    	delay_ms(10); // 延时去抖
	    	if (KEY2 == 0)
	    	{
	    		while (KEY2 == 0)
	    			; // 等待按键释放
	    		return 2;
	    	}
	    }

        else if (KEY3 == 0) // 按键按下低电平		SW3
	    {
	    	delay_ms(10); // 延时去抖
	    	if (KEY3 == 0)
	    	{
	    		while (KEY3 == 0)
	    			; // 等待按键释放
	    		return 3;
	    	}
	    }

        else if (KEY4 == 0) // 按键按下低电平		SW4
	    {
	    	delay_ms(10); // 延时去抖
	    	if (KEY4 == 0)
	    	{
	    		while (KEY4 == 0)
	    			; // 等待按键释放
	    		return 4;
	    	}
	    }
    }
    return 0; 
}